package offer.offer01;


import java.util.Arrays;

public class S06从头到尾打印链表 {
    /**
     * 直接创建一个最大数量的数组, 从后往前填, 然后把数据截取需要的部分输出
     */
    public int[] reversePrint(ListNode head) {
        int[] output = new int[10000];
        ListNode tmp1 = head;
        //必须定义在外面, 要不然会变成代码块中的局部变量, 不能在这个循环之外使用
        int listLength = 1;
        for(; tmp1 != null; listLength++) {
            output[10000 - listLength] = tmp1.val;
            tmp1 = tmp1.next;
        }
        //这个方法也是从0开始, 取到了参数二, 不取参数三
        // 注意这个Arrays.copyOfRange方法, Arrays要看
        return Arrays.copyOfRange(output, 10001 - listLength, 10000);
    }

    //先数一遍数量, 再一个个赋值, 不知道为何这样会快, 数据的检索原理？
    public int[] reversePrint2(ListNode head) {
        ListNode lastnode=head;
        int length=0;
        while(lastnode!=null){
            length++;
            lastnode=lastnode.next;
        }
        int[] s=new int[length];
        length=length-1;
        int i=0;
        while(head!=null){
            s[length-i]=head.val;
            head=head.next;
            i++;
        }
        return s;
    }
}
class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}